/*
 * Copyright (C) 拾光分享网
 * All rights reserved, Designed By www.hiai.top.
 * Email：goodsking@163.com.
 * Version：V1.0.2(20230701).
 */
package top.hiai.download;

import top.hiai._admin.user.UserAdminService;
import top.hiai.common.model.Article;
import top.hiai.common.model.Download;
import top.hiai.common.model.User;
import top.hiai.config.BaseController;

import java.util.Date;

/**
 * @Author www.hiai.top
 * @Email goodsking@163.com
 * @Message 更多资源尽在www.hiai.top
 * @Introduction 类的介绍：下载控制器
 */
public class DownloadController extends BaseController {

    DownloadService downloadService = new DownloadService();
    UserAdminService userAdminService = new UserAdminService();

    /**
     * 前台文章判断用户是否已经下载过这个资源了
     * 1.判断用户是否登录了，没有登录返回错误信息
     * 2.判断用户是否已经下载过该资源了，如果下载了返回已经下载过的资源的信息
     * 3.没有下载先判断用户积分是否够用，返回相应的信息
     * 4.用户下载扣除相应的积分，发表文章的用户得到想用的积分
     *
     * @return 返回错误信息中，
     * 1  用户没登录
     * 2  已经下载过
     * 3  积分不够
     * 4   可以下载
     * 5  去下载的界面
     */
    public void userDownloadExist() {
        Article article;
        int aid = getInt("aid");
        if (!notLogin()) {
            User user = getLoginAccount();
            int uid = user.getInt("uid");
            article = downloadService.getCountByUserIdAndArticleId(uid, aid);
            //判断是否下载过
            if (article == null) {
                renderJson("errMsg", 4);
                return;
            } else {
                renderJson("errMsg", 2);
                return;
            }
        } else {
            renderJson("errMsg", 1);
            return;
        }
    }

    /**
     * 这里首先判断用户登录没，用户是否下载过该资源，如果全部都不满足，证明用户要下载这个资源
     */
    @SuppressWarnings("unused")
    public void userDownloadCkeck() {
        User user = getLoginAccount();
        int aid = getInt("aid");
        int uid = user.getInt("uid");
        Article article;
        /** 下载用户人的用户的积分 */
        int userPoints;
        /** 下载的文章要使用的积分 */
        int articlePoints;
        /** 该文章是由哪个用户发的贴 */
        int uidArticle;

        /**
         * 如果没有下载，则判断用户的积分是否够用
         * 根据ID找到这篇文章 */
        article = downloadService.findById(aid);

        /** 用户的积分 */
        userPoints = user.getInt("points");
        /** 文章的积分 */
        articlePoints = article.getInt("points");
        /** 该文章是由哪个用户发表的文章 */
        uidArticle = article.getInt("uid");

        if ((userPoints - articlePoints) >= 0) {
            /**
             *用户可以下载
             *1.扣除下载用户的积分
             *2.给上传的用户添加积分
             *3.给用户下载添加记录值
             *4.跳转到下载的界面
             */
            //1.扣除下载用户的积分
            userPoints = userPoints - articlePoints;
            downloadService.setUserReducePoints(uid, userPoints);
            //2.给上传的用户添加积分
            int resuleId = downloadService.setUserAddPoints(uidArticle, articlePoints);

            //3.给用户下载添加记录值
            getModel(Download.class).setDownload_date(new Date()).setUser_id(uid).setArticle_id(aid).save();
            //4.跳转到下载的界面
            renderJson("errMsg", 5);
        } else {
            renderJson("errMsg", 3);
            return;
        }
    }

    /**
     * 跳转到VIP下载文章资源界面
     * 返回的信息
     * 1  用户没登录
     * 2  不是vip用户不能下载
     * 3  是vip用户可以下载
     */
    public void userVipDownLoad() {
        int aid = getInt("aid");
        if (!notLogin()) {
            User user = userAdminService.findById(getLoginAccount().getUid());
            Integer isVip = user.getIs_vip();
            if (isVip == 1) {
                setAttr("article", downloadService.findById(aid));
                render("/_view/index/toVipDownLoadPage.html");
                renderJson("errMsg", 3);
                return;
            } else {
                renderJson("errMsg", 2);
                return;
            }
        } else {
            renderJson("errMsg", 1);
            return;
        }
    }

    /**
     * 下载文章资源界面
     */
    public void toVipDownLoadPage() {
        int aid = getParaToInt("aid");
        setAttr("article", downloadService.findById(aid));
        render("/_view/index/toVipDownLoadPage.html");
    }
}